package com.zyf.cloud.common.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtils {
	
		/**
		 * 获取半小时之前的时间
		 * @return
		 */
		public static String getAhalfhourbeforeDate(){
			long curren = System.currentTimeMillis();
	        curren -= 30 * 60 * 1000;
	        Date da = new Date(curren);
	        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	        return dateFormat.format(da);
		}

		/**
		 * 指定时间的N小时以后
		 *
		 * @param date         指定日期
		 * @param severalYears N 小时
		 * @return N小时以后的时间
		 */
		public static String NHoursLater(Date date, int severalYears) {

			Calendar calendar = Calendar.getInstance();
			calendar.setTime(date);
			calendar.add(Calendar.HOUR, +severalYears);
			date = calendar.getTime();
			return getDateTime(date);
		}
		
		/**
		 * 将字符串转换成时间 格式:yyyy-MM-dd HH:mm:ss
		 * @param str
		 * @return
		 */
	   public static Date strToDate(String str) {
		   SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		   Date date = null;
		   try {
		    date = format.parse(str);
		   } catch (ParseException e) {
		    e.printStackTrace();
		   }
		   return date;
		}
	   
	   /**
	    * 将标准时间格式转换成yyyy-MM-dd HH:mm:ss
	    * @param d
	    * @return
	    */
	   public static String getDateTime(Date d) {
	      String ft = "yyyy-MM-dd HH:mm:ss";
	      SimpleDateFormat format = new SimpleDateFormat(ft);
	      return format.format(d);
	   }
	   
	   /**
	    * 将标准时间格式转换成yyyy-MM-dd
	    * @param d
	    * @return
	    */
	   public static String getDate(Date d) {
	      String ft = "yyyy-MM-dd";
	      SimpleDateFormat format = new SimpleDateFormat(ft);
	      return format.format(d);
	   }
	   
	   /**
	    * 获取当前时间 yyyy-MM-dd格式
	    * @return
	    */
	   public static String currentDate() {
	      String ft = "yyyy-MM-dd";
	      SimpleDateFormat format = new SimpleDateFormat(ft);
	      return format.format(new Date());
	   }

	   /**
	    * 获取当前时间  yyyy-MM-dd HH:mm:ss
	    * @return
	    */
	   public static String currentDateTime() {
	      String ft = "yyyy-MM-dd HH:mm:ss";
	      SimpleDateFormat format = new SimpleDateFormat(ft);
	      return format.format(new Date());
	   }


	   /**
		* 获取两个日期相差的月数
		* @param date1  较大的日期
		* @param date2  较小的日期
		* @return 如果d1>d2返回 月数差 否则返回-1
		*/
		public static int getMonthDiff(String date1,String date2,String pattern) throws Exception {
			   SimpleDateFormat sdf=new SimpleDateFormat(pattern);
	        Calendar c1=Calendar.getInstance();
	        Calendar c2=Calendar.getInstance();

	        c1.setTime(sdf.parse(date1));
	        c2.setTime(sdf.parse(date2));
		    /*Calendar c1 = Calendar.getInstance();
		    Calendar c2 = Calendar.getInstance();
		    c1.setTime(d1);
		    c2.setTime(d2);*/
		    if(c1.getTimeInMillis() < c2.getTimeInMillis()) return -1;
		    int year1 = c1.get(Calendar.YEAR);
		    int year2 = c2.get(Calendar.YEAR);
		    int month1 = c1.get(Calendar.MONTH);
		    int month2 = c2.get(Calendar.MONTH);
		    int day1 = c1.get(Calendar.DAY_OF_MONTH);
		    int day2 = c2.get(Calendar.DAY_OF_MONTH);
		    // 获取年的差值 假设 d1 = 2015-8-16 d2 = 2011-9-30
		    int yearInterval = year1 - year2;
		    // 如果 d1的 月-日 小于 d2的 月-日 那么 yearInterval-- 这样就得到了相差的年数
		    if(month1 < month2 || month1 == month2 && day1 < day2) yearInterval --;
		    // 获取月数差值
		    int monthInterval = (month1 + 12) - month2 ;
		    if(day1 < day2) monthInterval --;
		    monthInterval %= 12;
		    return yearInterval * 12 + monthInterval;
		}


		public static int compare_date(String date1, String date2, String pattern) {
			Date d1 = stringToDate(date1, pattern);
			Date d2 = stringToDate(date2, pattern);
			if (d1.getTime() > d2.getTime()) {
                System.out.println("dt1 在dt2前");
                return 1;
            } else if (d1.getTime() < d2.getTime()) {
                System.out.println("dt1在dt2后");
                return -1;
            } else {//相等
                return 0;
            }
		}

		/**
		 * 将字符串转换为指点格式的时间戳
		 * @param str
		 * @param pattern 格式
		 * @return
		 */
		public static Date stringToDate(String str,String pattern){
			SimpleDateFormat sdf=new SimpleDateFormat(pattern);//小写的mm表示的是分钟
			Date date = null;
			try {
				date = sdf.parse(str);
			} catch (ParseException e) {
				e.printStackTrace();
			}  
			return date;
		}
		
		/**
		 * 月份加减 
		 * @param currentDateTime 要操作的时间
		 * @param month_number 减输入负数
		 * @return
		 * @throws ParseException
		 */
		public static String subMonth(String currentDateTime, int month_number) throws ParseException {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
	        Date dt = sdf.parse(currentDateTime);  
	        Calendar rightNow = Calendar.getInstance();  
	        rightNow.setTime(dt);  
	  
	        rightNow.add(Calendar.MONTH, month_number);  
	        Date dt1 = rightNow.getTime();  
	        String reStr = sdf.format(dt1);  
	        return reStr;  
		}
}
